import { authService } from '@/services/authService'

// API 配置文件

// 环境检测函数
function getBaseUrl(): string {
  // 优先使用环境变量
  if (import.meta.env.VITE_API_BASE_URL) {
    return import.meta.env.VITE_API_BASE_URL;
  }
  
  // 检测是否为本地开发环境
  const isDevelopment = import.meta.env.DEV;
  const isLocalhost = window.location.hostname === 'localhost' || 
                     window.location.hostname === '127.0.0.1' ||
                     window.location.hostname.includes('.local');
  
  // 本地开发环境使用本地API
  if (isDevelopment || isLocalhost) {
    return 'http://laravel11.local/api';
  }
  
  // 生产环境使用线上API
  return 'https://yangbaoyuan.cn/api';
}

export const API_CONFIG = {
  // API 基础URL - 自动根据环境选择
  BASE_URL: getBaseUrl(),
  
  // 认证令牌 - 从环境变量获取，生产环境应该通过登录流程获取
  TOKEN: import.meta.env.VITE_DEFAULT_TOKEN || '',
  
  // 添加调试日志
  debug: true,
  
  // API 端点
  ENDPOINTS: {
        // 投资组合相关
        PORTFOLIO_OVERVIEW: '/assets/portfolio/overview',
        REVENUE_TREND: '/assets/portfolio/revenueTrend',
        EXPENSE_TREND: '/assets/expensesTrend',
        
        // 资产相关
        ASSETS: '/assets',
        ASSET_CATEGORIES: '/assets/categories',
        ASSET_PRICES: '/assets/prices',
        
        // 体重相关
        WEIGHT: {
            RECORDS: '/weight/records',
            STATS: '/weight/stats',
            ADD: '/weight/add',
        }
    },
  
  // 默认请求头
  DEFAULT_HEADERS: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
  },
  
  // 请求超时时间（毫秒）
  TIMEOUT: 10000,
}

/**
 * 获取完整的API URL
 */
export function getApiUrl(endpoint: string): string {
    // 如果端点已经是完整URL，直接返回
    if (endpoint.startsWith('http')) {
      return endpoint;
    }
    // 确保端点以/开头
    const cleanEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
    return `${API_CONFIG.BASE_URL}${cleanEndpoint}`;
  }

/**
 * 获取认证头
 * @param token 可选的认证令牌，如果不提供则使用默认令牌
 */
export function getAuthHeaders(token?: string): Record<string, string> {
  const authToken = token || API_CONFIG.TOKEN
  
  if (!authToken) {
    return API_CONFIG.DEFAULT_HEADERS
  }
  
  return {
    ...API_CONFIG.DEFAULT_HEADERS,
    'Authorization': `Bearer ${authToken}`,
  }
}

/**
 * 获取用户认证头（强制检查登录状态）
 * @param token 可选的认证令牌，如果不提供则从authService获取
 */
export function getUserAuthHeaders(token?: string): Record<string, string> {
  const authToken = token || authService.getToken()
  
  if (!authToken) {
    throw new Error('用户未登录')
  }
  
  return {
    ...API_CONFIG.DEFAULT_HEADERS,
    'Authorization': `Bearer ${authToken}`,
  }
}

/**
 * 通用的API请求函数
 * @param endpoint API端点
 * @param options 请求选项
 * @param token 可选的认证令牌
 */
export async function apiRequest<T>(
  endpoint: string,
  options: RequestInit = {},
  token?: string
): Promise<T> {
  const url = getApiUrl(endpoint)
    const headers = getAuthHeaders(token)
    
    
    const config: RequestInit = {
        mode: 'cors', // 添加CORS模式
        credentials: 'omit', // 不发送证书，避免跨域问题
        headers,
        ...options,
    }
    
    try {
        const response = await fetch(url, config)
    
    
    if (!response.ok) {
      const errorText = await response.text()
      throw new Error(`HTTP error! status: ${response.status}, message: ${errorText}`)
    }
    
    const data = await response.json()
    return data
  } catch (error) {
    console.error(`API request failed for ${endpoint}:`, error)
    throw error
  }
}